
package org.web.clientlistmanager.server.dto.query;

import javax.validation.constraints.*;
import java.util.*;
import lombok.Getter;
import lombok.Setter;
import org.web.base.domain.QueryBase;

@Setter
@Getter
public class QueryClientProcessRequest extends QueryBase {
    /**
     * 圈定 'specifiedAttributeSet' 返回属性信息范围，指定的属性信息与列定义名称保持一致。
     */
    public static final Set<String> COLUMN_SET = new HashSet<>(Arrays.asList( "client_process_id", "client_service_name", "client_address", "client_extended_value", "is_unique_per_ip", "process_num", "process_start_time", "process_uuid", "process_last_beat_time", "create_time", "update_time","is_delete"));


    /**
     * 根据 'clientProcessId' 精确查询, 'clientProcessId' 表示主键，client_node表主键。
     */
    private Integer clientProcessId;

    /**
     * 设置 'clientProcessId' 列表查询, 'clientProcessId' 表示主键，client_node表主键。
     */
    private List < Integer > clientProcessIdList;

    /**
     * 根据 'clientServiceName' 精确查询, 'clientServiceName' 表示客户端微服务名称，嵌入的微服务名称，即传统意义上的微服务名称，许可证也是通过微服务进行管理业务域资源的。对于业务业务域的启动配置字段[XXX]。也是许可定义的微服务名称。来源于客户端配置参数，由客户端注册时提供。
     */
    private String clientServiceName;

    /**
     * 设置 'clientServiceName' 列表查询, 'clientServiceName' 表示客户端微服务名称，嵌入的微服务名称，即传统意义上的微服务名称，许可证也是通过微服务进行管理业务域资源的。对于业务业务域的启动配置字段[XXX]。也是许可定义的微服务名称。来源于客户端配置参数，由客户端注册时提供。
     */
    private List < String > clientServiceNameList;

    /**
     * 根据 'clientAddress' 精确查询, 'clientAddress' 表示运行实例IP，微服务运行的服务IP, 客户端可被对外访问的IP地址。需要考虑对IPV6的支持，以及未来容器场景下的IP影响。优先来源于客户端配置参数，如果没有配置，则基于JDK默认获取IP处理，由客户端注册时提供。
     */
    private String clientAddress;

    /**
     * 设置 'clientAddress' 列表查询, 'clientAddress' 表示运行实例IP，微服务运行的服务IP, 客户端可被对外访问的IP地址。需要考虑对IPV6的支持，以及未来容器场景下的IP影响。优先来源于客户端配置参数，如果没有配置，则基于JDK默认获取IP处理，由客户端注册时提供。
     */
    private List < String > clientAddressList;

    /**
     * 根据 'clientExtendedValue' 精确查询, 'clientExtendedValue' 表示扩展值，业务方的扩展值，允许变更，但不推荐。由客户端注册时提供。
     */
    private String clientExtendedValue;

    /**
     * 根据 'isUniquePerIp' 精确查询, 'isUniquePerIp' 表示唯一标识，同一个服务在一个IP下是否唯一。enum={Y:表示唯一;N:表示不唯一。}。
     */
    private String isUniquePerIp;

    /**
     * 设置 'isUniquePerIp' 列表查询, 'isUniquePerIp' 表示唯一标识，同一个服务在一个IP下是否唯一。enum={Y:表示唯一;N:表示不唯一。}。
     */
    private List < String > isUniquePerIpList;

    /**
     * 根据 'processNum' 精确查询, 'processNum' 表示进程号，微服务运行的服务号，即linux进程号，不需要客户端配置，客户端启动时自动获取，且不允许修改，由客户端注册时提供。
     */
    private String processNum;

    /**
     * 设置大于 'processStartTime' 查询, 'processStartTime' 表示进程启动时间，格式【yyyy-MM-dd HH:mm:ss】，来源于客户端SDK，客户端启动时创建，且不允许修改，由客户端注册时提供。
     */
    private String moreThanProcessStartTime;

    /**
     * 设置小于 'processStartTime' 查询, 'processStartTime' 表示进程启动时间，格式【yyyy-MM-dd HH:mm:ss】，来源于客户端SDK，客户端启动时创建，且不允许修改，由客户端注册时提供。
     */
    private String lessThanProcessStartTime;

    /**
     * 设置大于等于 'processStartTime' 查询, 'processStartTime' 表示进程启动时间，格式【yyyy-MM-dd HH:mm:ss】，来源于客户端SDK，客户端启动时创建，且不允许修改，由客户端注册时提供。
     */
    private String equalAndMoreThanProcessStartTime;

    /**
     * 设置小于等于 'processStartTime' 查询, 'processStartTime' 表示进程启动时间，格式【yyyy-MM-dd HH:mm:ss】，来源于客户端SDK，客户端启动时创建，且不允许修改，由客户端注册时提供。
     */
    private String equalAndLessThanProcessStartTime;

    /**
     * 根据 'processUuid' 精确查询, 'processUuid' 表示客户端产生的UUID，客户端启动时创建，不需要客户端配置，且不允许修改，由客户端注册时提供。客户端与服务端的心跳交互，也是通过UUID进行交互。
     */
    private String processUuid;

    /**
     * 设置 'processUuid' 列表查询, 'processUuid' 表示客户端产生的UUID，客户端启动时创建，不需要客户端配置，且不允许修改，由客户端注册时提供。客户端与服务端的心跳交互，也是通过UUID进行交互。
     */
    private List < String > processUuidList;

    /**
     * 设置大于 'processLastBeatTime' 查询, 'processLastBeatTime' 表示心跳时间，记录上次心跳时间。心跳时间不完全等价于记录修改时间。记录删除时，只修改记录修改时间，心跳更新，同时更新lastBeatTime和updateTime。
     */
    private Date moreThanProcessLastBeatTime;

    /**
     * 设置小于 'processLastBeatTime' 查询, 'processLastBeatTime' 表示心跳时间，记录上次心跳时间。心跳时间不完全等价于记录修改时间。记录删除时，只修改记录修改时间，心跳更新，同时更新lastBeatTime和updateTime。
     */
    private Date lessThanProcessLastBeatTime;

    /**
     * 设置大于等于 'processLastBeatTime' 查询, 'processLastBeatTime' 表示心跳时间，记录上次心跳时间。心跳时间不完全等价于记录修改时间。记录删除时，只修改记录修改时间，心跳更新，同时更新lastBeatTime和updateTime。
     */
    private Date equalAndMoreThanProcessLastBeatTime;

    /**
     * 设置小于等于 'processLastBeatTime' 查询, 'processLastBeatTime' 表示心跳时间，记录上次心跳时间。心跳时间不完全等价于记录修改时间。记录删除时，只修改记录修改时间，心跳更新，同时更新lastBeatTime和updateTime。
     */
    private Date equalAndLessThanProcessLastBeatTime;

    /**
     * 设置大于 'createTime' 查询, 'createTime' 表示创建时间，用于记录创建时间。
     */
    private Date moreThanCreateTime;

    /**
     * 设置小于 'createTime' 查询, 'createTime' 表示创建时间，用于记录创建时间。
     */
    private Date lessThanCreateTime;

    /**
     * 设置大于等于 'createTime' 查询, 'createTime' 表示创建时间，用于记录创建时间。
     */
    private Date equalAndMoreThanCreateTime;

    /**
     * 设置小于等于 'createTime' 查询, 'createTime' 表示创建时间，用于记录创建时间。
     */
    private Date equalAndLessThanCreateTime;

    /**
     * 设置大于 'updateTime' 查询, 'updateTime' 表示修改时间，用于记录修改时间。
     */
    private Date moreThanUpdateTime;

    /**
     * 设置小于 'updateTime' 查询, 'updateTime' 表示修改时间，用于记录修改时间。
     */
    private Date lessThanUpdateTime;

    /**
     * 设置大于等于 'updateTime' 查询, 'updateTime' 表示修改时间，用于记录修改时间。
     */
    private Date equalAndMoreThanUpdateTime;

    /**
     * 设置小于等于 'updateTime' 查询, 'updateTime' 表示修改时间，用于记录修改时间。
     */
    private Date equalAndLessThanUpdateTime;

    /**
     * 根据 'isDelete' 精确查询, 'isDelete' 表示删除，记录是否逻辑删除，enum={Y:表示逻辑删除;N:表示没有删除}。
     */
    private String isDelete;

    @NotNull(message = "pageSize 不能为空")
    @Max(value = 200, message = "pageSize 不能大于200")
    public Integer getPageSize() {
        return super.getPageSize();
    }

}
